package net.sk.china.platform.service;

import com.baomidou.mybatisplus.extension.service.IService;
import net.sk.china.platform.model.Category;
import net.sk.china.platform.request.category.CategoryRequest;
import net.sk.china.platform.request.category.CategorySearchRequest;
import net.sk.china.platform.response.CategoryTreeResponse;
import net.sk.china.common.request.PageParamRequest;

import java.util.HashMap;
import java.util.List;

/**
 * CategoryService 接口
 * +----------------------------------------------------------------------
 * // | Talk To [ 聊来改善地区金融服务环境，助力企业发展 ]
 * // +----------------------------------------------------------------------
 * // | Copyright (c) 2018-2024 聊来 All rights reserved.
 * // +----------------------------------------------------------------------
 * // | Licensed ( <a href="http://www.apache.org/licenses/LICENSE-2.0">apache</a> )
 * // +----------------------------------------------------------------------
 * // | @Author: 聊来 <18970881148@qq.com>
 * // +----------------------------------------------------------------------
 * // | DateTime: 2024/6/3 11:57
 * // +----------------------------------------------------------------------
 */
public interface CategoryService extends IService<Category> {

    /**
     * 分类列表
     * @param request 请求参数
     * @param pageParamRequest 分页参数
     * @return {@code List<Category>}
     */
    List<Category> getList(CategorySearchRequest request, PageParamRequest pageParamRequest);

    /**
     * 新增分类表
     * @param categoryRequest 请求参数
     * @return {@code boolean}
     */
    boolean create(CategoryRequest categoryRequest);

    /**
     * 删除分类
     * @param id 数据ID
     * @return {@code Integer}
     */
    Integer delete(Integer id);

    /**
     * 更新分类
     * @param request 请求数据
     * @param id 分类ID
     * @return {@code boolean}
     */
    boolean update(CategoryRequest request, Integer id);

    /**
     * 带树形结构的无限级分类
     * @param type 分类
     * @param status 状态
     * @param name 名称
     * @return {@code List<CategoryTreeResponse>}
     */
    List<CategoryTreeResponse> getListTree(Integer type, Integer status, String name);

    /**
     * 带树形结构的无限级分类
     * @param type 分类
     * @param status 状态
     * @param categoryIdList 分类idList
     * @return {@code List<CategoryTreeResponse>}
     */
    List<CategoryTreeResponse> getListTree(Integer type, Integer status, List<Integer> categoryIdList);

    /**
     * 根据分类id集合获取分类数据
     * @param ids id集合字符串
     * @return {@code List<Category>}
     */
    List<Category> getByIds(List<Integer> ids);

    /**
     * 更新分类状态
     * @param id 分类ID
     * @return {@code boolean}
     */
    boolean updateStatus(Integer id);

    /**
     * 通过id集合获取列表 id => name
     * @param cateIdList List<Integer> id集合
     * @return {@code HashMap<Integer, String>}
     */
    HashMap<Integer, String> getListInId(List<Integer> cateIdList);
}
